/*
 * 验证函数包含常用各种类型的验证正则
 * */
function myValidata(){
	var self = this;
	self.config = {
		
	}
}
//验证是否有字母
myValidata.prototype.isLetter = function(value){
	var reg = /[A-Za-z]/g;
	if(reg.test(value)){
		return true
	}else{
		return false
	}
}
//验证是否有数字
myValidata.prototype.isNum = function(value){
	var reg = /\d/g;
	if(reg.test(value)){
		return true
	}else{
		return false
	}
}
//验证是否有汉字
myValidata.prototype.isChinese = function(value){
	var reg = /^[\u4e00-\u9fa5]{0,}$/;
	if(reg.test(value)){
		return true
	}else{
		return false
	}
}
//验证是否有空格
myValidata.prototype.isSpace = function(value){
	if(value.indexOf(" ") >= 0){
		return true
	}else{
		return false
	}
}
//验证是否有下划线
myValidata.prototype.isUnderline = function(value){
	if(value.indexOf("_") >= 0){
		return true
	}else{
		return false
	}
}
//验证是否有英文标点符号
myValidata.prototype.isPunctuation = function(value){
	var reg = /[\ |\~|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\||\\|\[|\]|\{|\}|\;|\:|\"|\'|\,|\<|\.|\>|\/|\?]/g;
	if(reg.test(value)){
		return true
	}else{
		return false
	}
}
//验证是否是电话
myValidata.prototype.isTel = function(value){
	var reg = /^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$/;
	if(reg.test(value)){
		return true
	}else{
		return false
	}
}
//验证是否是手机号
myValidata.prototype.isPhone = function(value){
	var reg = /^0?1[3|4|5|7|8][0-9]\d{8}$/;
	if(reg.test(value)){
		return true
	}else{
		return false
	}
}
//验证是否是邮箱
myValidata.prototype.isEmail = function(value){
	var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/; 
	if(reg.test(value)){
		return true
	}else{
		return false
	}
}
//验证是否是url,必须以http://打头
myValidata.prototype.isURL = function(value){
	return!!value.match(/(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/g);
}
//验证是否是身份证
myValidata.prototype.isPersonNum = function(value){
	var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
	if(reg.test(value)){
		return true
	}else{
		return false
	}
}
//验证是否是银行卡（Luhn算法）
myValidata.prototype.isBankNum = function(value){
    var lastNum=value.substr(value.length-1,1);//取出最后一位（与luhn进行比较）
    var first15Num = value.substr(0,value.length-1);//前15或18位
    var newArr=new Array();
    for(var i=first15Num.length-1;i>-1;i--){    //前15或18位倒序存进数组
        newArr.push(first15Num.substr(i,1));
    }
    var arrJiShu=new Array();  //奇数位*2的积 <9
    var arrJiShu2=new Array(); //奇数位*2的积 >9
    
    var arrOuShu=new Array();  //偶数位数组
    for(var j=0;j<newArr.length;j++){
        if((j+1)%2==1){//奇数位
            if(parseInt(newArr[j])*2<9){
            	arrJiShu.push(parseInt(newArr[j])*2);
            }else{
            	arrJiShu2.push(parseInt(newArr[j])*2);
            }
        }else{//偶数位
        	arrOuShu.push(newArr[j]);
        } 
    }
    
    var jishu_child1=new Array();//奇数位*2 >9 的分割之后的数组个位数
    var jishu_child2=new Array();//奇数位*2 >9 的分割之后的数组十位数
    for(var h=0;h<arrJiShu2.length;h++){
        jishu_child1.push(parseInt(arrJiShu2[h])%10);
        jishu_child2.push(parseInt(arrJiShu2[h])/10);
    }        
    
    var sumJiShu=0; //奇数位*2 < 9 的数组之和
    var sumOuShu=0; //偶数位数组之和
    var sumJiShuChild1=0; //奇数位*2 >9 的分割之后的数组个位数之和
    var sumJiShuChild2=0; //奇数位*2 >9 的分割之后的数组十位数之和
    var sumTotal=0;
    for(var m=0;m<arrJiShu.length;m++){
        sumJiShu=sumJiShu+parseInt(arrJiShu[m]);
    }
    
    for(var n=0;n<arrOuShu.length;n++){
        sumOuShu=sumOuShu+parseInt(arrOuShu[n]);
    }
    for(var p=0;p<jishu_child1.length;p++){
        sumJiShuChild1=sumJiShuChild1+parseInt(jishu_child1[p]);
        sumJiShuChild2=sumJiShuChild2+parseInt(jishu_child2[p]);
    }      
    //计算总和
    sumTotal=parseInt(sumJiShu)+parseInt(sumOuShu)+parseInt(sumJiShuChild1)+parseInt(sumJiShuChild2);
    
    //计算luhn值
    var k= parseInt(sumTotal)%10==0?10:parseInt(sumTotal)%10;        
    var luhn= 10-k;
    
    if(lastNum==luhn){
    	return true;
    }else{
    	return false;
    }     
}
//验证是否是密码，验证规则：由字母、数字、特殊字符（不包含空格）组成，且必须包含字母、数字、特殊字符中的两种类型
//input:jquery获取到的input输入框对象
myValidata.prototype.isPassword = function(value){
	var self = this;
	var rule = false;
	if(self.config.useRuleScope == null)self.config.useRuleScope = input;
	if(self.config.useRuleScope != input){
		self.config.useRuleScope = input;
		self.config.useRule = [];
	}
	rule = (self.isLetter(value) && self.isNum(value) && !self.isSpace(value)) || 
		(self.isLetter(value) && self.isPunctuation(value) && !self.isSpace(value)) ||
		(self.isNum(value) && self.isPunctuation(value) && !self.isSpace(value)) ||
		(self.isLetter(value) && self.isNum(value) && self.isPunctuation(value) && !self.isSpace(value));

	if(rule){
		input.addClass("good");
		return true;
	}else{
		input.removeClass("good");
		return false;
	}
}